home *** CD-ROM | disk | FTP | other *** search
Wrap
package javax.swing; import java.awt.Component; import java.awt.Insets; import java.awt.Point; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; import java.awt.dnd.DropTargetEvent; import java.awt.dnd.DropTargetListener; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.Serializable; import javax.swing.TransferHandler.TransferSupport; import javax.swing.text.JTextComponent; import sun.swing.AccessibleMethod; class TransferHandler$DropHandler implements DropTargetListener, Serializable, ActionListener { private Timer timer; private Point lastPosition; private Rectangle outer; private Rectangle inner; private int hysteresis; private Component component; private Object state; private TransferHandler.TransferSupport support; private static final int AUTOSCROLL_INSET = 10; private TransferHandler$DropHandler() { this.outer = new Rectangle(); this.inner = new Rectangle(); this.hysteresis = 10; this.support = new TransferHandler.TransferSupport((Component)null, (DropTargetEvent)null, (TransferHandler.1)null); } private void updateAutoscrollRegion(JComponent var1) { Rectangle var2 = var1.getVisibleRect(); this.outer.setBounds(var2.x, var2.y, var2.width, var2.height); Insets var3 = new Insets(0, 0, 0, 0); if (var1 instanceof Scrollable) { byte var4 = 20; if (var2.width >= var4) { var3.left = var3.right = 10; } if (var2.height >= var4) { var3.top = var3.bottom = 10; } } this.inner.setBounds(var2.x + var3.left, var2.y + var3.top, var2.width - (var3.left + var3.right), var2.height - (var3.top + var3.bottom)); } private void autoscroll(JComponent var1, Point var2) { if (var1 instanceof Scrollable) { Scrollable var3 = (Scrollable)var1; if (var2.y < this.inner.y) { int var4 = var3.getScrollableUnitIncrement(this.outer, 1, -1); Rectangle var5 = new Rectangle(this.inner.x, this.outer.y - var4, this.inner.width, var4); var1.scrollRectToVisible(var5); } else if (var2.y > this.inner.y + this.inner.height) { int var6 = var3.getScrollableUnitIncrement(this.outer, 1, 1); Rectangle var9 = new Rectangle(this.inner.x, this.outer.y + this.outer.height, this.inner.width, var6); var1.scrollRectToVisible(var9); } if (var2.x < this.inner.x) { int var7 = var3.getScrollableUnitIncrement(this.outer, 0, -1); Rectangle var10 = new Rectangle(this.outer.x - var7, this.inner.y, var7, this.inner.height); var1.scrollRectToVisible(var10); } else if (var2.x > this.inner.x + this.inner.width) { int var8 = var3.getScrollableUnitIncrement(this.outer, 0, 1); Rectangle var11 = new Rectangle(this.outer.x + this.outer.width, this.inner.y, var8, this.inner.height); var1.scrollRectToVisible(var11); } } } private void initPropertiesIfNecessary() { if (this.timer == null) { Toolkit var1 = Toolkit.getDefaultToolkit(); Integer var2 = (Integer)var1.getDesktopProperty("DnD.Autoscroll.interval"); this.timer = new Timer(var2 == null ? 100 : var2, this); var2 = (Integer)var1.getDesktopProperty("DnD.Autoscroll.initialDelay"); this.timer.setInitialDelay(var2 == null ? 100 : var2); var2 = (Integer)var1.getDesktopProperty("DnD.Autoscroll.cursorHysteresis"); if (var2 != null) { this.hysteresis = var2; } } } public void actionPerformed(ActionEvent var1) { this.updateAutoscrollRegion((JComponent)this.component); if (this.outer.contains(this.lastPosition) && !this.inner.contains(this.lastPosition)) { this.autoscroll((JComponent)this.component, this.lastPosition); } } private void setComponentDropLocation(TransferHandler.TransferSupport var1, boolean var2) { TransferHandler.DropLocation var3 = var1 == null ? null : var1.getDropLocation(); if (this.component instanceof JTextComponent) { try { AccessibleMethod var4 = new AccessibleMethod(JTextComponent.class, "setDropLocation", new Class[]{TransferHandler.DropLocation.class, Object.class, Boolean.TYPE}); this.state = var4.invokeNoChecked(this.component, new Object[]{var3, this.state, var2}); } catch (NoSuchMethodException var5) { throw new AssertionError("Couldn't locate method JTextComponet.setDropLocation"); } } else if (this.component instanceof JComponent) { this.state = ((JComponent)this.component).setDropLocation(var3, this.state, var2); } } private void handleDrag(DropTargetDragEvent var1) { TransferHandler var2 = ((TransferHandler.HasGetTransferHandler)this.component).getTransferHandler(); if (var2 == null) { var1.rejectDrag(); this.setComponentDropLocation((TransferHandler.TransferSupport)null, false); } else { TransferSupport.access$400(this.support, this.component, var1); boolean var3 = var2.canImport(this.support); if (var3) { var1.acceptDrag(this.support.getDropAction()); } else { var1.rejectDrag(); } boolean var4 = TransferSupport.access$500(this.support) ? TransferSupport.access$600(this.support) : var3; this.setComponentDropLocation(var4 ? this.support : null, false); } } public void dragEnter(DropTargetDragEvent var1) { this.state = null; this.component = var1.getDropTargetContext().getComponent(); this.handleDrag(var1); if (this.component instanceof JComponent) { this.lastPosition = var1.getLocation(); this.updateAutoscrollRegion((JComponent)this.component); this.initPropertiesIfNecessary(); } } public void dragOver(DropTargetDragEvent var1) { this.handleDrag(var1); if (this.component instanceof JComponent) { Point var2 = var1.getLocation(); if (Math.abs(var2.x - this.lastPosition.x) <= this.hysteresis && Math.abs(var2.y - this.lastPosition.y) <= this.hysteresis) { if (!this.timer.isRunning()) { this.timer.start(); } } else if (this.timer.isRunning()) { this.timer.stop(); } this.lastPosition = var2; } } public void dragExit(DropTargetEvent var1) { this.cleanup(false); } public void drop(DropTargetDropEvent var1) { TransferHandler var2 = ((TransferHandler.HasGetTransferHandler)this.component).getTransferHandler(); if (var2 == null) { var1.rejectDrop(); this.cleanup(false); } else { TransferSupport.access$400(this.support, this.component, var1); boolean var3 = var2.canImport(this.support); if (var3) { var1.acceptDrop(this.support.getDropAction()); boolean var4 = TransferSupport.access$500(this.support) ? TransferSupport.access$600(this.support) : var3; this.setComponentDropLocation(var4 ? this.support : null, false); boolean var5; try { var5 = var2.importData(this.support); } catch (RuntimeException var7) { var5 = false; } var1.dropComplete(var5); this.cleanup(var5); } else { var1.rejectDrop(); this.cleanup(false); } } } public void dropActionChanged(DropTargetDragEvent var1) { if (this.component != null) { this.handleDrag(var1); } } private void cleanup(boolean var1) { this.setComponentDropLocation((TransferHandler.TransferSupport)null, var1); if (this.component instanceof JComponent) { ((JComponent)this.component).dndDone(); } if (this.timer != null) { this.timer.stop(); } this.state = null; this.component = null; this.lastPosition = null; } // $FF: synthetic method TransferHandler$DropHandler(TransferHandler.1 var1) { this(); } }